关于log4j安全漏洞以及版本替换的记录 您所在的位置:网站首页 log4j 漏洞影响版本 关于log4j安全漏洞以及版本替换的记录

关于log4j安全漏洞以及版本替换的记录

2024-06-29 19:56| 来源: 网络整理| 查看: 265

目录

pom依赖

log4j2配置

指定外置配置

SpringBoot

SpringMVC

一个标准的startup.sh

pom依赖

log4j的安全漏洞是大事件,早几个月项目上的都已经打完补丁,替换了包了。 

简单记录下日志这块的使用。 目前jdk是java8及以上,要求log4j的版本必须是2.17.1。

看下pom依赖:

org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-test test org.apache.commons commons-lang3 3.8.1 org.apache.logging.log4j log4j-api 2.17.1 org.apache.logging.log4j log4j-core 2.17.1 org.apache.logging.log4j log4j-jul 2.17.1 org.apache.logging.log4j log4j-slf4j-impl 2.17.1 org.apache.logging.log4j log4j-web 2.17.1

正常SpringBoot集成的时候,先在spring-boot-starter-web依赖中排除掉spring-boot-starter-logging的依赖,然后再引入spring-boot-starter-log4j2就能用了。但是这时候默认的log4j版本太低,我们需要自己引入所需要的版本, 按照如上的方式引入即可。 

log4j2配置

在贴一个常用的log4j2的配置,如下:

nicc-unicom-file-listener %d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n logs %d{yyyy-MM-dd}-%i.gz 10MB ${LOG_PATTERN} ${LOG_PATTERN} 指定外置配置

SpringBoot工程和SpringMVC工程在指定外置log4j的配置项的时候是不同的。 

SpringBoot

正常情况下,log4j2.xml都是在resource目录下,打包成jar之后,不管jar对应的同级目录有没有log4j2.xml文件,他都是以jar包内的配置文件为主进行生效。SpringBoot类的项目可以在启动jar包的时候通过指定logging.file的方式来指定配置文件的位置。例如:

nohup java -Xms100m -Xmx100m -jar ../${name}-0.0.1-SNAPSHOT.jar -Dlogging.config=../config/log4j2.xml > ../logs/${name}.log & tail -f ../logs/${name}.log

或者

nohup java -Xms100m -Xmx100m -jar ../${name}-0.0.1-SNAPSHOT.jar --logging.config=../config/log4j2.xml > ../logs/${name}.log & tail -f ../logs/${name}.log

--】和【-D】的区别在于,前者其实等价于往Springboot的application.properties配置文件中添加了一个配置,后者是往系统变量中添加了一个值。 参考:Springboot 命令注入属性[--]&[-D] - 无心水 - 博客园

如果我们可以通过指定外置配置文件的话,其实可以直接通过 修改外置配置文件中的logging.config来指定绝对路径的日志配置文件

配置文件同理,可以通过指定-Dconfig.path来指定,如下:

nohup java -Xms100m -Xmx100m -jar nicc-0.0.1-SNAPSHOT.jar -Dlogging.config=../config/log4j2.xml -Dconfig.path=/../config/application.properties > ../logs/${name}.log & tail -f ../logs/${name}.log SpringMVC

SpringMVC是需要打成war包在tomcat中运行的,默认情况下我们可以通过在web.xml中配置log4j2.xml的指定位置,可以在web.xml中进行如下方式设置:

log4jConfiguration classpath:log4j2.xml log4jRefreshInterval 60000 org.apache.logging.log4j.web.Log4jServletContextListener

其中log4jConfiguration就是指定配置文件的路径,可以写成绝对路径,也可以写成classpath下的某个路径。

这种方式有一定弊端,那就是web.xml最终还是会被打到war包中,我们无法动态的在war启动之前就指定log4j2.xml配置文件的位置。 

如何动态指定呢?  SpringMVC使用maven配置SLF4J和Log4J2_newcih的博客-CSDN博客

可以通过设置一个系统变量来直接指定,可以修改tomcat的catalin.sh文件,添加一行注入系统变量的命令,如下:

declare -x CATALINA_OPTS="-Dlog4j.configurationFile=D:\vm\log4j2.xml"

也可以指定多个配置项,如下:

declare -x CATALINA_OPTS="-Dconfig.path='/app/api-gateway/config/default.properties' -Dlog4j.configurationFile=/app/api-gateway/config/log4j2.xml"

重点就是:log4j.configurationFile的指定,注意如果在web.xml里进行如上的配置,再通过-Dlog4j.configurationFile指定,后者不会生效。所以如果使用-Dlog4j.configurationFile方式动态指定,就不要再web.xml文件中配置。

一个标准的startup.sh #!/bin/bash pid=`ps -ef |grep cmo-0.0.1-SNAPSHOT.jar |grep -v grep|grep -v startup.sh|awk '{ print $2 }'` sleep 3 echo "be stoping" if [ "$pid" = "" ] then echo "not running" else kill -9 $pid fi echo "start running..." cd /app/ars-api nohup java -Dlogging.config=/app/ars-api/config/log4j2.xml -Dconfig.path=/app/ars-api/config/application.properties -jar cmo-asr.jar > /dev/null 2>&1 & echo "has started!!"



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有